home *** CD-ROM | disk | FTP | other *** search
- title FREE.ASM
- page,132
-
- cseg segment para 'code'
- assume cs:cseg
- main proc far
- org 100h
- start:
- jmp begin
-
- banner db 0ah,'FREE Vers 1.0 - Sept. 1985 - by Art Merrill',0dh,0ah,'$'
- db 'Copyright (C) 1985',0dh,0ah,'$'
- db 'Ziff-Davis Publishing Company',0dh,0ah,'$'
- total: db 0ah,8 dup(0),' bytes total disk space',0dh,0ah
- diff: db 8 dup(0),' bytes allocated',0dh,0ah
- bytes: db 8 dup(0),' bytes available on disk',0dh,0ah,0ah,'$'
- hltotal: dw 0,0
- hlbytes: dw 0,0
-
- begin:
- mov dx,offset banner
- mov ah,9
- int 21h
-
- mov si,5ch ;address of selected drive
- mov dl,[si]
- mov ah,36h ;get disk free space
- int 21h
-
- push ax ;save for total bytes
- push cx ;save for total bytes
- push dx ;save for total bytes
-
- mul bx ;get total clusters
- mul cx ;get total bytes
-
- std
- mov di,offset hlbytes+2
- xchg ax,dx
- stosw
- xchg ax,dx
- stosw
-
- mov di,offset bytes+7 ;storage for ascii printout
- call ascii
-
- pop dx ;get back total clusters
- pop cx ;get back bytes per sector
- pop ax ;get back sectors per cluster
-
- mul dx ;total clusters
- mul cx ;bytes per sector
-
- mov di,offset hltotal+2 ;same routine as above to get
- xchg ax,dx ; total bytes
- stosw
- xchg ax,dx
- stosw
-
- mov di,offset total+8 ;storage for ascii printout
- call ascii
-
- mov ax,word ptr hltotal+2 ;calculate difference between
- sub ax,word ptr hlbytes+2 ; total bytes and bytes allocated
- xchg ax,dx ; to get total bytes remaining
- mov ax,word ptr hltotal
- sub ax,word ptr hlbytes
- jnc skip
- dec dx ;adjust total for carry
- skip:
- mov di,offset diff+7 ;storage for ascii printout
- call ascii
-
- mov dx,offset total ;print results
- mov ah,9
- int 21h
-
- int 20h ;exit
-
- main endp
-
- ascii proc near
- xchg bp,dx ;save high word
- mov bx,0ah ;divisor
- mov cl,30h ;conversion for ascii
- rpt1:
- cmp bp,0 ;are we done with high words
- jz rpt2 ;yes
- xchg ax,bp ;no-get high word
- xor dx,dx ;clear dx
- div bx
- xchg bp,ax ;this will be the new high word
- div bx ;divide low word + remainder
- or dl,cl ;convert hex value to ascii
- mov [di],dl ;quotient into storage
- dec di ;step back one byte
- jmp rpt1 ;go again
- rpt2:
- xor dx,dx ;clear dx
- div bx
- or dl,cl ;convert hex value to ascii
- mov [di],dl ;quotient into storage
- dec di ;step back one byte
- cmp ax,0 ;are we done?
- jnz rpt2 ;no
-
- ret ;yes
- ascii endp
-
- cseg ends
- end start